// src/stores/problemStore.js
import { defineStore } from 'pinia'

export const useProblemStore = defineStore('problem', {
  state: () => ({
    problems: [
      {
        id: 201,
        title: '两数之和',
        difficulty: '简单',
        tags: ['数组', '哈希表'],
        passRate: 85,
        submissions: 1000000,
        description:
          '给定一个整数数组 nums 和一个整数目标值 target，请你在该数组中找出 和为目标值 target 的那 两个 整数，并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是，数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。',
        examples: [
          {
            input: 'nums = [2,7,11,15], target = 9',
            output: '[0,1]',
            explanation: '因为 nums[0] + nums[1] == 9 ，返回 [0, 1] 。'
          },
          {
            input: 'nums = [3,2,4], target = 6',
            output: '[1,2]'
          },
          {
            input: 'nums = [3,3], target = 6',
            output: '[0,1]'
          }
        ],
        solution: `
          <p>我们可以使用哈希表来解决这个问题，时间复杂度为 O(n)。以下是解题思路：</p>
          <ol>
            <li>创建一个哈希表来存储每个元素及其索引。</li>
            <li>遍历数组，对于每个元素 num：</li>
            <li>计算补数：complement = target - num</li>
            <li>如果 complement 在哈希表中，返回 [哈希表[complement], 当前索引]</li>
            <li>否则，将当前数字及其索引添加到哈希表中</li>
          </ol>
          <p>这种方法只需要遍历一次数组，就可以找到答案。</p>
          <pre><code>
    function twoSum(nums, target) {
      const map = new Map();
      for (let i = 0; i < nums.length; i++) {
        const complement = target - nums[i];
        if (map.has(complement)) {
          return [map.get(complement), i];
        }
        map.set(nums[i], i);
      }
      return [];
    }
          </code></pre>
        `
      },
      {
        id: 202,
        title: '最长回文子串',
        difficulty: '中等',
        tags: ['字符串', '动态规划'],
        passRate: 75,
        submissions: 800000,
        description: '给你一个字符串 s，找到 s 中最长的回文子串。',
        examples: [
          {
            input: 's = "babad"',
            output: '"bab"',
            explanation: '"aba" 同样是符合题意的答案。'
          },
          {
            input: 's = "cbbd"',
            output: '"bb"'
          }
        ],
        solution: '这里填写最长回文子串的解题思路和代码'
      },
      {
        id: 203,
        title: '接雨水',
        difficulty: '困难',
        tags: ['栈', '数组', '双指针'],
        passRate: 65,
        submissions: 600000,
        description:
          '给定 n 个非负整数表示每个宽度为 1 的柱子的高度图，计算按此排列的柱子，下雨之后能接多少雨水。',
        examples: [
          {
            input: 'height = [0,1,0,2,1,0,1,3,2,1,2,1]',
            output: '6',
            explanation:
              '上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图，在这种情况下，可以接 6 个单位的雨水（蓝色部分表示雨水）。'
          },
          {
            input: 'height = [4,2,0,3,2,5]',
            output: '9'
          }
        ],
        solution: '这里填写接雨水问题的解题思路和代码'
      }
    ],
    currentProblem: null
  }),
  actions: {
    setCurrentProblem(problemId) {
      this.currentProblem =
        this.problems.find((p) => p.id === problemId) || null
    }
  }
})
